# Khaled Al-Naami
# hp_ids

import config

class Event:
    ENTER_EVT = 0
    EXIT_EVT = 1
    '''
    #Linux Syscall Table for x86 and x86_64
    sysCallTable={
    'read':0,
    'write':1,
    'open':2,
    'close':3,
    'stat':4,
    'fstat':5,
    'lstat':6,
    'poll':7,
    'lseek':8,
    'mmap':9,
    'mprotect':10,
    'munmap':11,
    'brk':12,
    'rt_sigaction':13,
    'rt_sigprocmask':14,
    'rt_sigreturn':15,
    'ioctl':16,
    'pread64':17,
    'pwrite64':18,
    'readv':19,
    'writev':20,
    'access':21,
    'pipe':22,
    'select':23,
    'sched_yield':24,
    'mremap':25,
    'msync':26,
    'mincore':27,
    'madvise':28,
    'shmget':29,
    'shmat':30,
    'shmctl':31,
    'dup':32,
    'dup2':33,
    'pause':34,
    'nanosleep':35,
    'getitimer':36,
    'alarm':37,
    'setitimer':38,
    'getpid':39,
    'sendfile':40,
    'socket':41,
    'connect':42,
    'accept':43,
    'sendto':44,
    'recvfrom':45,
    'sendmsg':46,
    'recvmsg':47,
    'shutdown':48,
    'bind':49,
    'listen':50,
    'getsockname':51,
    'getpeername':52,
    'socketpair':53,
    'setsockopt':54,
    'getsockopt':55,
    'clone':56,
    'fork':57,
    'vfork':58,
    'execve':59,
    'exit':60,
    'wait4':61,
    'kill':62,
    'uname':63,
    'semget':64,
    'semop':65,
    'semctl':66,
    'shmdt':67,
    'msgget':68,
    'msgsnd':69,
    'msgrcv':70,
    'msgctl':71,
    'fcntl':72,
    'flock':73,
    'fsync':74,
    'fdatasync':75,
    'truncate':76,
    'ftruncate':77,
    'getdents':78,
    'getcwd':79,
    'chdir':80,
    'fchdir':81,
    'rename':82,
    'mkdir':83,
    'rmdir':84,
    'creat':85,
    'link':86,
    'unlink':87,
    'symlink':88,
    'readlink':89,
    'chmod':90,
    'fchmod':91,
    'chown':92,
    'fchown':93,
    'lchown':94,
    'umask':95,
    'gettimeofday':96,
    'getrlimit':97,
    'getrusage':98,
    'sysinfo':99,
    'times':100,
    'ptrace':101,
    'getuid':102,
    'syslog':103,
    'getgid':104,
    'setuid':105,
    'setgid':106,
    'geteuid':107,
    'getegid':108,
    'setpgid':109,
    'getppid':110,
    'getpgrp':111,
    'setsid':112,
    'setreuid':113,
    'setregid':114,
    'getgroups':115,
    'setgroups':116,
    'setresuid':117,
    'getresuid':118,
    'setresgid':119,
    'getresgid':120,
    'getpgid':121,
    'setfsuid':122,
    'setfsgid':123,
    'getsid':124,
    'capget':125,
    'capset':126,
    'rt_sigpending':127,
    'rt_sigtimedwait':128,
    'rt_sigqueueinfo':129,
    'rt_sigsuspend':130,
    'sigaltstack':131,
    'utime':132,
    'mknod':133,
    'uselib':134,
    'personality':135,
    'ustat':136,
    'statfs':137,
    'fstatfs':138,
    'sysfs':139,
    'getpriority':140,
    'setpriority':141,
    'sched_setparam':142,
    'sched_getparam':143,
    'sched_setscheduler':144,
    'sched_getscheduler':145,
    'sched_get_priority_max':146,
    'sched_get_priority_min':147,
    'sched_rr_get_interval':148,
    'mlock':149,
    'munlock':150,
    'mlockall':151,
    'munlockall':152,
    'vhangup':153,
    'modify_ldt':154,
    'pivot_root':155,
    '_sysctl':156,
    'prctl':157,
    'arch_prctl':158,
    'adjtimex':159,
    'setrlimit':160,
    'chroot':161,
    'sync':162,
    'acct':163,
    'settimeofday':164,
    'mount':165,
    'umount2':166,
    'swapon':167,
    'swapoff':168,
    'reboot':169,
    'sethostname':170,
    'setdomainname':171,
    'iopl':172,
    'ioperm':173,
    'create_module':174,
    'init_module':175,
    'delete_module':176,
    'get_kernel_syms':177,
    'query_module':178,
    'quotactl':179,
    'nfsservctl':180,
    'getpmsg':181,
    'putpmsg':182,
    'afs_syscall':183,
    'tuxcall':184,
    'security':185,
    'gettid':186,
    'readahead':187,
    'setxattr':188,
    'lsetxattr':189,
    'fsetxattr':190,
    'getxattr':191,
    'lgetxattr':192,
    'fgetxattr':193,
    'listxattr':194,
    'llistxattr':195,
    'flistxattr':196,
    'removexattr':197,
    'lremovexattr':198,
    'fremovexattr':199,
    'tkill':200,
    'time':201,
    'futex':202,
    'sched_setaffinity':203,
    'sched_getaffinity':204,
    'set_thread_area':205,
    'io_setup':206,
    'io_destroy':207,
    'io_getevents':208,
    'io_submit':209,
    'io_cancel':210,
    'get_thread_area':211,
    'lookup_dcookie':212,
    'epoll_create':213,
    'epoll_ctl_old':214,
    'epoll_wait_old':215,
    'remap_file_pages':216,
    'getdents64':217,
    'set_tid_address':218,
    'restart_syscall':219,
    'semtimedop':220,
    'fadvise64':221,
    'timer_create':222,
    'timer_settime':223,
    'timer_gettime':224,
    'timer_getoverrun':225,
    'timer_delete':226,
    'clock_settime':227,
    'clock_gettime':228,
    'clock_getres':229,
    'clock_nanosleep':230,
    'exit_group':231,
    'epoll_wait':232,
    'epoll_ctl':233,
    'tgkill':234,
    'utimes':235,
    'vserver':236,
    'mbind':237,
    'set_mempolicy':238,
    'get_mempolicy':239,
    'mq_open':240,
    'mq_unlink':241,
    'mq_timedsend':242,
    'mq_timedreceive':243,
    'mq_notify':244,
    'mq_getsetattr':245,
    'kexec_load':246,
    'waitid':247,
    'add_key':248,
    'request_key':249,
    'keyctl':250,
    'ioprio_set':251,
    'ioprio_get':252,
    'inotify_init':253,
    'inotify_add_watch':254,
    'inotify_rm_watch':255,
    'migrate_pages':256,
    'openat':257,
    'mkdirat':258,
    'mknodat':259,
    'fchownat':260,
    'futimesat':261,
    'newfstatat':262,
    'unlinkat':263,
    'renameat':264,
    'linkat':265,
    'symlinkat':266,
    'readlinkat':267,
    'fchmodat':268,
    'faccessat':269,
    'pselect6':270,
    'ppoll':271,
    'unshare':272,
    'set_robust_list':273,
    'get_robust_list':274,
    'splice':275,
    'tee':276,
    'sync_file_range':277,
    'vmsplice':278,
    'move_pages':279,
    'utimensat':280,
    'epoll_pwait':281,
    'signalfd':282,
    'timerfd_create':283,
    'eventfd':284,
    'fallocate':285,
    'timerfd_settime':286,
    'timerfd_gettime':287,
    'accept4':288,
    'signalfd4':289,
    'eventfd2':290,
    'epoll_create1':291,
    'dup3':292,
    'pipe2':293,
    'inotify_init1':294,
    'preadv':295,
    'pwritev':296,
    'rt_tgsigqueueinfo':297,
    'perf_event_open':298,
    'recvmmsg':299,
    'fanotify_init':300,
    'fanotify_mark':301,
    'prlimit64':302,
    'name_to_handle_at':303,
    'open_by_handle_at':304,
    'clock_adjtime':305,
    'syncfs':306,
    'sendmmsg':307,
    'setns':308,
    'getcpu':309,
    'process_vm_readv':310,
    'process_vm_writev':311,
    'kcmp':312,
    'finit_module':313
     }

    def __init__( self, number, time, cpu, processname, threadid, direction, systemcallName, args ):
        self.__number = int(number)
        self.__time      = str(time)
        self.__cpu   = int(cpu)
        self.__processname = str(processname)
        self.__threadid = int(threadid)
        self.__direction = int(direction)
        self.__systemcallName = str(systemcallName)
        self.__systemcallIndex = config.sysCallTable[systemcallName] # from dictionary[systemcallName]
        self.__args = str(args)

    def __del__(self):
        #print 'event ' + str(self.__number) + ' died'
        pass

    def getNumber(self): return self.__number
    def getTime(self): return self.__time
    def getCpu(self): return self.__cpu
    def getProcessname(self): return self.__processname
    def getThreadid(self): return self.__threadid
    def getDirection(self): return self.__direction
    def getSystemcallName(self): return self.__systemcallName
    def getSystemcallIndex(self): return self.__systemcallIndex
    def getArgs(self): return self.__args

    def setNumber(self, number): self.__number = int(number)
    def setTime(self, time): self.__time = str(time)
    def setCpu(self, cpu): self.__cpu = int(cpu)
    def setProcessname(self, processname): self.__processname = str(processname)
    def setThreadid(self, threadid): self.__threadid = int(threadid)
    def setDirection(self, direction): self.__direction = int(direction)
    def setSystemcallName(self, systemcallName): self.__systemcallName = str(systemcallName)
    def setSystemcallIndex(self, systemcallIndex): self.__systemcallIndex = int(systemcallIndex)
    def setArgs(self, args): self.__args = str(args)

    '''

    def __init__( self, direction, systemcallName ):
        self.__direction = int(direction)
        self.__systemcallName = str(systemcallName)
        self.__systemcallIndex = config.sysCallTable[systemcallName] # from dictionary[systemcallName]

    def getDirection(self): return self.__direction
    def getSystemcallName(self): return self.__systemcallName
    def getSystemcallIndex(self): return self.__systemcallIndex

    def setDirection(self, direction): self.__direction = int(direction)
    def setSystemcallName(self, systemcallName): self.__systemcallName = str(systemcallName)
    def setSystemcallIndex(self, systemcallIndex): self.__systemcallIndex = int(systemcallIndex)